Люди и доступ
Кто что может и откуда это взялось. Элемент 2.2.1 «Группы пользователей и профили доступа».
Роли и права
Элемент 2.1.2. Матрица «объект × операция» для выбранной роли. Роли и операции ведутся в книге — здесь только чтение (R-I1).
Конфликты разделения полномочий
Элемент 2.2.2. Первоисточник правил — Ролевая_модель.md §7.
| Правило | Сторона A | Сторона B | Тип | Уровень | Основание и компенсирующий контроль | Затронуто людей |
|---|
| Сотрудник | Правило | Как возник | Тип | Обоснование |
|---|
История назначений
Кто, кому, что и на каком основании. Истёкшее назначение прав не даёт, но из истории не исчезает (R-I6).
| Когда | Кто | Кому | Что | Действие | Основание |
|---|
Контракт экрана — для разработчика Vue/Laravel
Источник данных
Роли, объекты, операции, полномочия, АРМ и SoD приходят из build/config/takt-config.json (сборка scripts/export_config.py из книги и Ролевая_модель.md). Экран их только читает: создание роли или операции здесь невозможно (R-I1). Назначения и пользователи — данные приложения.
Компоненты
| AccessMatrix | props: role, objects, groups, expanded[]; emit select-cell. Колонки — группы операций, раскрытие по группе. |
| AccessCell | состояния: own / inherited / partial / none / sod. Всегда <button>: источник права доступен нажатием, не только наведением. |
| EffectiveRights | развёртка наследования; вход — набор ролей, выход — объединение матриц с пометкой роли-источника. |
| SodBadge | варианты danger (жёсткое) / warning (мягкое) / пунктир (через наследование). |
Расчёты — на сервере
Транзитивное замыкание наследования ролей и объединение полномочий считаются рекурсивным CTE в PostgreSQL и кэшируются на роль, а не собираются в браузере: в прототипе это сделано на клиенте только потому, что он самодостаточен. Проверка SoD при назначении — серверная, ответ экрана лишь отражает её.
Права на сам экран
IAM.ADMIN — ведение назначений; IAM.AUDIT — чтение и отчёты. Массовое назначение требует C и BULK (правило двух ключей).